<?php
/**
 * tpshop
 * ============================================================================
 * 版权所有 2015-2027 深圳搜豹网络科技有限公司，并保留所有权利。
 * 网站地址: http://www.tp-shop.cn
 * ----------------------------------------------------------------------------
 * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 * ============================================================================
 * Author: IT宇宙人
 * Date: 2015-09-09
 */

namespace Admin\Model;
use Think\Model;
class GoodsModel extends Model {
    protected $patchValidate = true; // 系统支持数据的批量验证功能，
    /**
     *     
        self::EXISTS_VALIDATE 或者0 存在字段就验证（默认）
        self::MUST_VALIDATE 或者1 必须验证
        self::VALUE_VALIDATE或者2 值不为空的时候验证
     * 
     * 
        self::MODEL_INSERT或者1新增数据时候验证
        self::MODEL_UPDATE或者2编辑数据时候验证
        self::MODEL_BOTH或者3全部情况下验证（默认）       
     */
    protected $_validate = array(
//        array('seller_name','require','店铺名称必须填写！',1 ,'',3),
//        array('seller_title','require','店铺标题必须填写！',1 ,'',3),
//        array('seller_describe','require','店铺描述必须填写！',1 ,'',3),
//        array('start_time','require','开店时间必须填写！',1 ,'',3),
//        array('epmi','require','一级类目必须填写！',1 ,'',3),
////        array('district','require','请选择地区！',1 ,'',3),
//        array('address','require','地址必须填写！',1 ,'',3),
//        array('now_business','require','当前主营必须填写！',1 ,'',3),
//        array('price','/\d{1,10}(\.\d{1,2})?$/','售价必须格式不对！',1 ,'',3),
//        array('b_price','/\d{1,10}(\.\d{1,2})?$/','保证金格式不对！',1 ,'',3),
//        array('j_price','/\d{1,10}(\.\d{1,2})?$/','技术年费格式不对！',1 ,'',3),
//        array('dk_price','/\d{1,10}(\.\d{1,2})?$/','贷款详情格式不对！',1 ,'',3),
////        array('acc_money','/\d{1,10}(\.\d{1,2})?$/','完成营业额指标格式不对！',1 ,'',3),
//        array('xinyong_price','/\d{1,10}(\.\d{1,2})?$/','信用额度格式不对！',1 ,'',3),
//        array('weigui_log','require','违规记录必须填写！',1 ,'',3),
//        array('dongtai_score','require','动态评分必须填写！',1 ,'',3),
//        array('brand_name','require','商标名称必须填写！',1 ,'',3),
//        array('brand_holder','require','商标持有者必须填写！',1 ,'',3),
//        array('company_name','require','公司名必须填写！',1 ,'',3),
//        array('company_reg_time','require','公司注册时间必须填写！',1 ,'',3),
//        array('reg_money','require','注册资金必须填写！',1 ,'',3),
//        array('company_legal_per','require','公司法人必须填写！',1 ,'',3),
//        array('taxpayer_qualification','require','纳税人资质必须填写！',1 ,'',3),
//        array('annals_info','require','年报状态必须填写！',1 ,'',3),
//        array('shareholder_num','require','股东人数必须填写！',1 ,'',3),
////        array('original_img','require','请选择图片',1 ,'',3),
//        array('yingyee_img','require','请选择图片',1 ,'',3),
//        array('yijileimu_img','require','请选择图片',1 ,'',3),
//        array('lishikoufen_img','require','请选择图片',1 ,'',3),
//        array('xuqiankaoke_img','require','请选择图片',1 ,'',3),
//        array('goods_type','require','请选择属性',1 ,'',3),
//        array('store_type','0','店铺类型必须选择。',1,'notequal',3),
//        array('brand_type','0','商标类型必须选择。',1,'notequal',3),
//        array('trade_type','0','所属行业必须选择。',1,'notequal',3),
//        array('area_type','0','所在地区必须选择。',1,'notequal',3),
//        array('price_type','0','价格区间必须选择。',1,'notequal',3),

        //array('cat_id','require','商品分类必须填写！',1 ,'',3),
//        array('cat_id','0','商品分类必须填写。',1,'notequal',3),
        //array('goods_sn','','商品货号重复！',2,'unique',1),
//        array('shop_price','/\d{1,10}(\.\d{1,2})?$/','本店售价格式不对。',2,'regex'),
//        array('member_price','/\d{1,10}(\.\d{1,2})?$/','会员价格式不对。',2,'regex'),
//        array('market_price','/\d{1,10}(\.\d{1,2})?$/','市场价格式不对。',2,'regex'), // currency
//        array('weight','/\d{1,10}(\.\d{1,2})?$/','重量格式不对。',2,'regex'),
//        array('exchange_integral','checkExchangeIntegral','积分抵扣金额不能超过商品总额',0,'callback'),
     );




    /** kenvid
     * 后置操作方法
     * 自定义的一个函数 用于数据保存后做的相应处理操作, 使用时手动调用
     * @param int $goods_id 商品id
     */

    public function afterSave1($goods_id){
        $goods=M('goods')->where("goods_id=$goods_id")->find();
        //重新计算价格
        $price=$goods['price'];//售价
        $sxf_ratio=M('config')->where("name='sxf_ratio'")->getField('value');//手续费比例
        $yfk_ratio=M('config')->where("name='yfk_ratio'")->getField('value');//预付款比例
        $yfk_top=M('config')->where("name='yfk_top'")->getField('value');// 预付款上限
        if(!$sxf_ratio)
            $sxf_ratio=10;
        if(!$yfk_ratio)
            $yfk_ratio=20;
        $j_price=$goods['j_price'];//技术年费
        $b_price=$goods['b_price'];//保证金
        if($goods['goods_type']==3){ //天猫 手续费=店铺价格*10%
            $s_price=$price*$sxf_ratio/100;//
        }else{ //其他 手续费 =（店铺价格+技术年费+保证金）*10%
            $s_price=($price+$j_price+$b_price)*$sxf_ratio/100;
        }
        $total_amount=$price+$j_price+$b_price+$s_price;
        $pay_price=($price+$j_price+$b_price+$s_price)*$yfk_ratio/100;// 当前订单需要支付的金额=（店铺价格+技术年费+保证金+手续费）*10%
        if($pay_price<0.01)
            $pay_price=0.01;
        if($yfk_top>0&&$pay_price>$yfk_top)//应支付金额大于上限制变成上限金额
            $pay_price=$yfk_top;
        $o_where['order_status']=0;
        $o_where['pay_status']=0;
        $o_where['is_delete']=0;
        $o_where['goods_id']=$goods_id;
        $order_list=M('order1')->where($o_where)->select();
        foreach($order_list AS $k=>$v){
            $up_data['order_id']=$v['order_id'];
            $up_data['total_amount']=$total_amount;
            $up_data['price']=$price;
            $up_data['b_price']=$b_price;
            $up_data['j_price']=$j_price;
            $up_data['pay_price']=$pay_price;
            $up_data['s_price']=$s_price;
            $res=M('order1')->save($up_data);
            unset($up_data);
        }
    }
    
    /**
     * 后置操作方法
     * 自定义的一个函数 用于数据保存后做的相应处理操作, 使用时手动调用
     * @param int $goods_id 商品id
     */
    public function afterSave($goods_id)
    {            
         // 商品货号
         $goods_sn = "MM".str_pad($goods_id,7,"0",STR_PAD_LEFT);   
         $this->where("goods_id = $goods_id and goods_sn = ''")->save(array("goods_sn"=>$goods_sn)); // 根据条件更新记录
                 
         // 商品图片相册  图册
         if(count($_POST['goods_images']) > 1)
         {                          
             array_pop($_POST['goods_images']); // 弹出最后一个             
             $goodsImagesArr = M('GoodsImages')->where("goods_id = $goods_id")->getField('img_id,image_url'); // 查出所有已经存在的图片
             
             // 删除图片
             foreach($goodsImagesArr as $key => $val)
             {
                 if(!in_array($val, $_POST['goods_images']))
                     M('GoodsImages')->where("img_id = {$key}")->delete(); // 
             }
             // 添加图片
             foreach($_POST['goods_images'] as $key => $val)
             {
                 if($val == null)  continue;                                  
                 if(!in_array($val, $goodsImagesArr))
                 {                 
                        $data = array(
                            'goods_id' => $goods_id,
                            'sortid' => $_POST['goods_images_sortid'][$key],
                            'image_url' => $val,
                        );
						
                        M("GoodsImages")->data($data)->add(); // 实例化User对象                     
                 }
				 else
				 {
					 	         
                        $data = array(
                            'sortid' => $_POST['goods_images_sortid'][$key],
                        );
						M('GoodsImages')->where(array('image_url'=>$val))->save($data);
                        //M("GoodsImages")->data($data)->save(); // 实例化User对象   
				 }
             }
         }
         // 查看主图是否已经存在相册中
		 /*
         $c = M('GoodsImages')->where("goods_id = $goods_id and image_url = '{$_POST['original_img']}'")->count(); 
         if($c == 0 && $_POST['original_img'])
         {
             M("GoodsImages")->add(array('goods_id'=>$goods_id,'image_url'=>$_POST['original_img'])); 
         }
         delFile("./Public/upload/goods/thumb/$goods_id"); // 删除缩略图
         */
         // 商品规格价钱处理
        $specGoodsPrice = M("SpecGoodsPrice"); // 实例化 商品规格 价格对象
        $specGoodsPrice->where('goods_id = '.$goods_id)->delete(); // 删除原有的价格规格对象         
         if($_POST['item'])
         {
             $spec = M('Spec')->getField('id,name'); // 规格表
             $specItem = M('SpecItem')->getField('id,item');//规格项
                          
             foreach($_POST['item'] as $k => $v)
             {
                   // 批量添加数据
                   $v['price'] = trim($v['price']);
                   $store_count = $v['store_count'] = trim($v['store_count']); // 记录商品总库存
                   $v['sku'] = trim($v['sku']);
                   $dataList[] = array('goods_id'=>$goods_id,'key'=>$k,'key_name'=>$v['key_name'],'price'=>$v['price'],'store_count'=>$v['store_count'],'sku'=>$v['sku']);
                    // 修改商品后购物车的商品价格也修改一下
                    M('cart')->where("goods_id = $goods_id and spec_key = '$k'")->save(array(
                            'market_price'=>$v['price'], //市场价
                            'goods_price'=>$v['price'], // 本店价
                            'member_goods_price'=>$v['price'], // 会员折扣价                        
                            ));                   
             }             
             $specGoodsPrice->addAll($dataList);             
             //M('Goods')->where("goods_id = 1")->save(array('store_count'=>10)); // 修改总库存为各种规格的库存相加           
         }   
         
         // 商品规格图片处理
         if($_POST['item_img'])
         {    
             M('SpecImage')->where("goods_id = $goods_id")->delete(); // 把原来是删除再重新插入
             foreach ($_POST['item_img'] as $key => $val)
             {                 
                 M('SpecImage')->data(array('goods_id'=>$goods_id ,'spec_image_id'=>$key,'src'=>$val))->add();
             }                                                    
         }
         refresh_stock($goods_id); // 刷新商品库存
    }

    /**
     * 检查积分兑换
     * @author dyr
     * @return bool
     */
    protected function checkExchangeIntegral()
    {
        $exchange_integral = I('exchange_integral', 0);
        $shop_price = I('shop_price', 0);
        $point_rate_value = tpCache('shopping.point_rate');
        $point_rate_value = empty($point_rate_value) ? 0 : $point_rate_value;
        if ($exchange_integral > ($shop_price * $point_rate_value)) {
            return false;
        } else {
            return true;
        }
    }

}
